package ru.niir.goodfil.ui;

import ru.niir.goodfil.exceptions.GoodfilSecurityException;
import ru.niir.goodfil.db.*;

import java.util.List;
import java.util.Calendar;
import java.util.ArrayList;

public class ExpiredPersonalPricesBean extends PageBean
{
    public ExpiredPersonalPricesBean()
    {
        if (!getSecurityBean().getIsRoleAdministrator())
            throw new GoodfilSecurityException("Функция \"истекающие персональные цены\" доступна только администраторам");
    }

    public List<PersonalPrice> getExpiredPersonalPrices()
    {
        List<PersonalPrice> result = new ArrayList<PersonalPrice>();

        gf().createIfNotExists("personal.price.expiration.page.days", 7);
        int days = gf().getInt("personal.price.expiration.page.days");

        List<PersonalPrice> personalPrices = gf().getPersonalPrices(null);
        for (PersonalPrice personalPrice : personalPrices)
        {
            long beg = personalPrice.getBegDate() == null ? Long.MIN_VALUE : personalPrice.getBegDate().getTime();
            long end = personalPrice.getEndDate() == null ? Long.MAX_VALUE : personalPrice.getEndDate().getTime();
            long curr = Calendar.getInstance().getTimeInMillis();

            long d = end - curr;
            if (d > 0 && d < 1000*60*60*days)
            {
                Client client = gf().getClientById(personalPrice.getClientId());
                if (client == null) continue;
//                ClientGroup clientGroup = gf().getClientGroupById(client.getClientGroupId());
//                client.setClientGroup(clientGroup);
                personalPrice.setClient(client);

                Good good = gf().getGoodById(personalPrice.getGoodId());
                if (good == null) continue;
                GoodType goodType = gf().getGoodTypeById(good.getGoodTypeId());
                good.setGoodType(goodType);
                personalPrice.setGood(good);

                result.add(personalPrice);
            }
        }
        return result;
    }

    public int getDaysCount()
    {
        return gf().getInt("personal.price.expiration.page.days");
    }
}
